// Verilated -*- C++ -*-
// DESCRIPTION: Verilator output: Primary design header
//
// This header should be included by all source files instantiating the design.
// The class here is then constructed to instantiate the design.
// See the Verilator manual for examples.

#ifndef VERILATED_VSECRET_IMPL_H_
#define VERILATED_VSECRET_IMPL_H_  // guard

#include "verilated_heavy.h"

//==========

class Vsecret_impl_PSvZrA;

//----------

VL_MODULE(Vsecret_impl) {
  public:

    // PORTS
    // The application code writes and reads these signals to
    // propagate new values into/out from the Verilated model.
    VL_IN8(clk,0,0);
    VL_IN(a,31,0);
    VL_IN(b,31,0);
    VL_OUT(x,31,0);

    // LOCAL SIGNALS
    // Internals; generally not touched by application code
    IData PSxTSi;

    // LOCAL VARIABLES
    // Internals; generally not touched by application code
    CData PSbAU8;

    // INTERNAL VARIABLES
    // Internals; generally not touched by application code
    Vsecret_impl_PSvZrA* __VlSymsp;  // Symbol table

    // CONSTRUCTORS
  private:
    VL_UNCOPYABLE(Vsecret_impl);  ///< Copying not allowed
  public:
    /// Construct the model; called by application code
    /// If contextp is null, then the model will use the default global context
    /// If name is "", then makes a wrapper with a
    /// single model invisible with respect to DPI scope names.
    Vsecret_impl(VerilatedContext* contextp, const char* name = "TOP");
    Vsecret_impl(const char* name = "TOP")
      : Vsecret_impl(nullptr, name) {}
    /// Destroy the model; called (often implicitly) by application code
    ~Vsecret_impl();

    // API METHODS
    /// Return current simulation context for this model.
    /// Used to get to e.g. simulation time via contextp()->time()
    VerilatedContext* contextp();
    /// Evaluate the model.  Application must call when inputs change.
    void eval() { eval_step(); }
    /// Evaluate when calling multiple units/models per time step.
    void eval_step();
    /// Evaluate at end of a timestep for tracing, when using eval_step().
    /// Application must call after all eval() and before time changes.
    void eval_end_step() {}
    /// Simulation complete, run final blocks.  Application must call on completion.
    void final();

    // INTERNAL METHODS
    static void PS59SB(Vsecret_impl_PSvZrA* __restrict vlSymsp);
    void PS2Eji(Vsecret_impl_PSvZrA* symsp, bool first);
  private:
    static QData PSk3CK(Vsecret_impl_PSvZrA* __restrict vlSymsp);
    static QData PS1f7R(Vsecret_impl_PSvZrA* __restrict vlSymsp);
    static void PSNmyH(Vsecret_impl* self) VL_ATTR_COLD;
  public:
    static void PSb7EA(Vsecret_impl_PSvZrA* __restrict vlSymsp);
  private:
#ifdef VL_DEBUG
    void PSS4mM();
#endif  // VL_DEBUG
  public:
    static void PSHAFY(Vsecret_impl_PSvZrA* __restrict vlSymsp) VL_ATTR_COLD;
    static void PSl3Hn(Vsecret_impl_PSvZrA* __restrict vlSymsp) VL_ATTR_COLD;
    static void PS57ij(Vsecret_impl_PSvZrA* __restrict vlSymsp) VL_ATTR_COLD;
    static void PSZxtZ(Vsecret_impl_PSvZrA* __restrict vlSymsp);
} VL_ATTR_ALIGNED(VL_CACHE_LINE_BYTES);

//----------


#endif  // guard
